#pragma once
#include <iostream>
#include <string>
using namespace std;

const string ProtocolSep = "\r\n";

class Protocol
{
public:
                    // 第二个\n为了方便Debug
    // "len\nconntent\n"

    // "le
    // "len
    // "len\n
    // "len\nco
    // "len\nconntent
    // "len\nconntent\n"
    // "len\nconntent\n" "le
    bool Package(const string &content, string* message)
    {
        *message = to_string(content.size()) + ProtocolSep + content + ProtocolSep;
        return true;
    }

    bool Unpacking(string &message, string* content)
    {
        int pos = message.find(ProtocolSep);
        if(pos == string::npos) return false;

        string len = message.substr(0, pos);
        if(stoi(len) > message.size()) return false;

        *content = message.substr(pos + ProtocolSep.size(), stoi(len));
        message.erase(0, len.size() + ProtocolSep.size() * 2 + (*content).size());
        return true;
    }

private:
};